﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ServiceSATT;
using ApplicationContext;

namespace UI_SATT
{
    public partial class FrmNuevaFederacion : Form, IInterfazFederacion, IListadoPais, IListadoProvincia, IListadoLocalidades, IListadoFederacion, IInterfazPais, IInterfazProvincias, IInterfazLocalidades
    {
        private int IdFederacion;
        string ImplementaFederacion = "FederacionService";
        string ImplementaUbicacion = "UbicacionService";
        IFederacionService FederacionService;
        ILocalidadService LocalidadService;
        IProvinciaService ProvinciaService;
        IPaisService PaisService;
        string[][] ListaFederaciones;

        public FrmNuevaFederacion()
        {
            InitializeComponent();
        }

        private void FrmNuevaFederacion_Load(object sender, EventArgs e)
        {
            FederacionService = (IFederacionService)AppContext.Instance.GetObject(ImplementaFederacion);
            FederacionService.ListaFederacion(this);
            PaisService = (IPaisService)AppContext.Instance.GetObject(ImplementaUbicacion);
            PaisService.Listado(this);
        }

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        #region Miembros de IInterfazFederacion

        public int Id
        {
            get { return IdFederacion; }
            set { IdFederacion = value; }
        }

        public string Nombre
        {
            get
            {
                return TxtNombreFederacion.Text;
            }
            set
            {
                TxtNombreFederacion.Text = value;
            }
        }

        public string Iniciales
        {
            get
            {
                return txtInicialesFederacion.Text;
            }
            set
            {
                txtInicialesFederacion.Text = value;
            }
        }

        public bool Estado
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        string IInterfazFederacion.Pais { get { return CboPaisFederacion.SelectedItem.ToString(); } set { CboPaisFederacion.Text = value; } }

        string IInterfazFederacion.Provincia { get { return CboPciaFederacion.SelectedItem.ToString(); } set { CboPciaFederacion.Text = value; } }

        string IInterfazFederacion.Localidad { get { return CboLocalidadFederacion.SelectedItem.ToString(); } set { CboLocalidadFederacion.Text = value; } }

        #endregion

        #region Miembros de IListadoPais

        public List<string> LstPais
        {
            set 
            {
                CboPaisFederacion.DataSource = value;
                CboPaisFederacion.SelectedIndex = -1;
            }
        }

        #endregion

        #region Miembros de IListadoProvincia

        public string Pais
        {
            get { return CboPaisFederacion.SelectedItem.ToString(); }
        }

        public List<string> LstProvincia
        {
            set 
            {
                if (value.Count > 0)
                {
                    CboPciaFederacion.DataSource = value;
                    CboPciaFederacion.SelectedIndex = -1;
                }
                else
                    CboPciaFederacion.DataSource = null;
            }
        }

        #endregion

        #region Miembros de IListadoLocalidades

        public string Provincia
        {
            get { return CboPciaFederacion.SelectedItem.ToString(); }
        }

        public List<string> LstLocalidades
        {
            set 
            {
                if (value.Count > 0)
                    CboLocalidadFederacion.DataSource = value;
                else
                    CboLocalidadFederacion.DataSource = null;
            }
        }

        #endregion

        private void BtnAceptar_Click(object sender, EventArgs e)
        {
            if (CboLocalidadFederacion.SelectedIndex > -1 && CboPaisFederacion.SelectedIndex > -1 && CboPciaFederacion.SelectedIndex > -1 &&
                txtInicialesFederacion.Text != "" && TxtNombreFederacion.Text != "")
            {
                try
                {
                    if (gbFederaciones.Text == "Nuevo")
                        FederacionService.Agregar(this);
                    else
                        FederacionService.Actualizar(this);
                    this.LimpiarCampos();
                    FederacionService.ListaFederacion(this);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
                MessageBox.Show("Complete todos los campos antes de continuar.");
        }

        private void CboPaisFederacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar) || e.KeyChar == 8)
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void CboPciaFederacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar) || e.KeyChar == 8)
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void CboLocalidadFederacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsLetter(e.KeyChar) || e.KeyChar == 8)
                e.Handled = false;
            else
                e.Handled = true;
        }

        private void CboPaisFederacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboPaisFederacion.SelectedIndex > -1)
            {
                if (ProvinciaService == null)
                    ProvinciaService = (IProvinciaService)AppContext.Instance.GetObject(ImplementaUbicacion);
                ProvinciaService.Listado(this);
            }
        }

        private void CboPciaFederacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboPciaFederacion.SelectedIndex > -1)
            {
                if (LocalidadService == null)
                    LocalidadService = (ILocalidadService)AppContext.Instance.GetObject(ImplementaUbicacion);
                LocalidadService.Listado(this);
            }
        }

        private void cmbFederaciones_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void FrmNuevaFederacion_FormClosing(object sender, FormClosingEventArgs e)
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
        }

        #region Miembros de IInterfazPais

        public int idpais
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string NombrePais
        {
            get
            {
                return CboPaisFederacion.Text;
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        #endregion

        #region Miembros de IInterfazProvincias

        public int idprovincia
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string NombreProvincia
        {
            get
            {
                return CboPciaFederacion.Text;
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        string IInterfazProvincias.Pais
        {
            get
            {
                return CboPaisFederacion.SelectedItem.ToString();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        #endregion

        #region Miembros de IInterfazLocalidades

        public int IdLocalidad
        {
            get
            {
                throw new NotImplementedException();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        public string NombreLocalidad
        {
            get
            {
                return CboLocalidadFederacion.Text;
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        string IInterfazLocalidades.Provincia
        {
            get
            {
                return CboPciaFederacion.SelectedItem.ToString();
            }
            set
            {
                throw new NotImplementedException();
            }
        }

        #endregion

        #region Miembros de IListadoFederacion

        public string[][] Listado
        {
            set
            {
                if (cmbFederaciones.Items.Count > 0)
                    cmbFederaciones.Items.Clear();
                ListaFederaciones = value;
                foreach (string[] valor in value)
                {
                    cmbFederaciones.Items.Add(valor[0]);
                }
                cmbFederaciones.SelectedIndex = -1;
            }
        }

        #endregion

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            gbFederaciones.Enabled = true;
            gbFederaciones.Text = "Nuevo";
            CboPaisFederacion.SelectedIndex = -1;
            CboPaisFederacion.Focus();
            CboPciaFederacion.SelectedIndex = -1;
            CboLocalidadFederacion.SelectedIndex = -1;
            TxtNombreFederacion.Text = "";
            txtInicialesFederacion.Text = "";
            if (cmbFederaciones.SelectedIndex > -1)
                cmbFederaciones.SelectedIndex = -1;
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (cmbFederaciones.SelectedIndex > -1)
            {
                gbFederaciones.Enabled = true;
                gbFederaciones.Text = "Modificar";
                string[] valores = ListaFederaciones[(int)cmbFederaciones.SelectedIndex];
                CboPaisFederacion.SelectedItem = valores[2];
                CboPciaFederacion.SelectedItem = valores[3];
                CboLocalidadFederacion.SelectedItem = valores[4];
                TxtNombreFederacion.Text = valores[0];
                txtInicialesFederacion.Text = valores[1];
                IdFederacion = FederacionService.ObtenerID(valores[0]);
            }
            else
                MessageBox.Show("Seleccione una federación de la lista para modificar.");
        }

        private void LimpiarCampos()
        {
            CboPaisFederacion.SelectedIndex = -1;
            CboPciaFederacion.SelectedIndex = -1;
            CboLocalidadFederacion.SelectedIndex = -1;
            TxtNombreFederacion.Text = "";
            txtInicialesFederacion.Text = "";
            if (cmbFederaciones.SelectedIndex > -1)
                cmbFederaciones.SelectedIndex = -1;
            gbFederaciones.Text = "";
            gbFederaciones.Enabled = false;
        }

        private void BtnAgregarLocalidad_Click(object sender, EventArgs e)
        {
            Form AgregarLocalidad = new FrmAgregarLocalidades();
            if (AgregarLocalidad.ShowDialog() == DialogResult.OK)
            {
                PaisService.Listado(this);
                CboLocalidadFederacion.Text = "";
                CboPciaFederacion.Text = "";

            }
        }

    }
}
